package com.mm.cloud.common.redis.service;

import java.util.concurrent.TimeUnit;

/**
 * Redis操作公共服务接口
 *
 * @author mr
 * @since 2021-06-09
 */
public interface IRedisService<K, V> {

    /**
     * 设置对象
     *
     * @param k 键
     * @param v 值
     * @return true false
     */
    Boolean set(K k, V v);

    /**
     * 设置对象
     *
     * @param k 键
     * @param v 值
     * @param seconds 有效时间
     * @param unit 时间单位
     * @return true false
     */
    Boolean set(K k, V v, long seconds, TimeUnit unit);

    /**
     * 获取对象
     *
     * @param k 键
     * @return 值
     */
    V get(K k);

    /**
     * 删除对象
     *
     * @param k 键
     * @return true false
     */
    Boolean delete(K k);

    /**
     * 根据key 得到设置的超时时间
     *
     * @param k 键
     * @return 值
     */
    Long getExpire(K k);

    /**
     * 修改key 的超时时间
     *
     * @param k 键
     * @param seconds 有效时间
     * @param unit 时间单位
     * @return true false
     */
    Boolean expire(K k, long seconds, TimeUnit unit);

    /**
     * 如果没有就设置
     *
     * @param k 键
     * @param v 值
     * @param seconds 有效时间
     * @param unit 时间单位
     * @return 值
     */
    V getAndSet(K k, V v, long seconds, TimeUnit unit);

    /**
     * 设置自增
     *
     * @param key 键
     * @param length 每次增加长度
     * @return 值
     */
    Long inc(K key, long length);

    /**
     * 判断缓存中是否存在 value
     *
     * @param key 键
     * @return true false
     */
    Boolean exists(K key);
}
